package futbol.tacticas.concursantes2007.SeteTeam.jugadores.facklab;

import java.awt.Point;
import java.util.Vector;

import futbol.tacticas.Comando;


/**
 * Este jugador se encarga de la tansicion del balon 
 * desde la defensa hasta la delantera.
 * 
 * @author Sete
 *
 */
public class TacticaCentroBajo  extends futbol.tacticas.concursantes2007.SeteTeam.jugadores.AbstractTacticaJugador{
	
	public TacticaCentroBajo(int xInicial, int yInicial, int fuerza, final Entrenador entrenador) {
		super(Entrenador.CEN_BAJO, xInicial, yInicial, fuerza, entrenador);
	}

	protected Point EvaluacionLineal(Point A, Point B, int D) {
		Point Solucion = B;
		Point Auxiliar;
		
		for (int i=-D;i<=D;i++){
			Auxiliar = new Point(D,(int)B.getY());
			if (Densidad_Jugadores(Solucion, A)>Densidad_Jugadores(Auxiliar, A)){
				Solucion = Auxiliar;
			}
		}		
		return Solucion;
	}
	
	
	protected void generarMovimientoOfensivo(final Vector<Comando> comandos){
		
		Point P = new Point(getSituacion().getBola());

		if (P.y<80) P = new Point(P.x,80);
		comandos.add(irA(P.x,P.y));	
	}
	
	protected void generarMovimientoDefensivo(final Vector<Comando> comandos){
		int   D = 110; // Desplazamiento
		Point CMB = getSituacion().getMisJugadores()[Entrenador.CEN_MED_BAJO].getLocation();
		Point P = new Point((int)CMB.getX()+50,100); // Punto central
		Point A = new Point(CMB);
	
		Point O = EvaluacionLineal(A,P,D);
		comandos.add(irA(O.getX(), O.getY()));
	}

	protected void generarMovimiento(final Vector<Comando> comandos) {
		if (getPosicion().distance(getSituacion().getBola())<30){
			Point O = new Point(getSituacion().getBola());
			comandos.add(irA(O.x, O.y));
		}else{
			if (getSituacion().getBola().getX()>0){
				generarMovimientoOfensivo(comandos);
			}else{
				generarMovimientoDefensivo(comandos);
			}
		}
	}

	protected void generarAccion(final Vector<Comando> comandos) {
		int Alto = Densidad_Jugadores(getPosicion(), getSituacion().getMisJugadores()[Entrenador.DEL_ALTO].getLocation()); 
		int Medio= Densidad_Jugadores(getPosicion(), getSituacion().getMisJugadores()[Entrenador.CEN_MED_ALTO].getLocation()); 
		int Bajo = Densidad_Jugadores(getPosicion(), getSituacion().getMisJugadores()[Entrenador.DEL_BAJO].getLocation()); 
		//int Goal = Densidad_Jugadores(getPosicion(), getEntrenador().getPuntoDebilPorteria()); 

		Comando temp = pase(Entrenador.DEL_ALTO);
		if ((Alto  < Medio) && (Alto < Bajo)) temp = pase(Entrenador.DEL_ALTO);
		if ((Medio < Alto ) && (Medio< Bajo)) temp = pase(Entrenador.CEN_MED_ALTO);
		if ((Bajo  < Medio) && (Bajo < Alto)) temp = pase(Entrenador.DEL_BAJO);
		//if ((getSituacion().getBola().getX()>80) && (Goal  < Bajo) && (Goal  < Medio) && (Goal < Alto)) temp = tiroAPuertaPreciso();
		comandos.add(temp);
	}
	
}
